package com.doubao.user.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doubao.common.result.Result;
import com.doubao.user.dto.request.UserFeedbackRequest;
import com.doubao.user.entity.UserFeedback;

/**
 * 用户反馈服务接口
 */
public interface UserFeedbackService {

    /**
     * 提交反馈
     *
     * @param userId  用户ID
     * @param request 反馈请求
     * @return 提交结果
     */
    Result<Void> submitFeedback(Long userId, UserFeedbackRequest request);

    /**
     * 获取用户反馈列表
     *
     * @param userId 用户ID
     * @param page   页码
     * @param size   每页大小
     * @return 反馈列表
     */
    IPage<UserFeedback> getUserFeedbacks(Long userId, int page, int size);

    /**
     * 获取反馈详情
     *
     * @param feedbackId 反馈ID
     * @return 反馈详情
     */
    UserFeedback getFeedbackById(Long feedbackId);

    /**
     * 标记反馈为已处理
     *
     * @param feedbackId 反馈ID
     * @return 操作结果
     */
    Result<Void> markAsProcessed(Long feedbackId);

    /**
     * 回复反馈
     *
     * @param feedbackId 反馈ID
     * @param reply      回复内容
     * @return 操作结果
     */
    Result<Void> replyFeedback(Long feedbackId, String reply);

    /**
     * 删除反馈
     *
     * @param feedbackId 反馈ID
     * @return 操作结果
     */
    Result<Void> deleteFeedback(Long feedbackId);

    /**
     * 获取所有反馈列表（管理员使用）
     *
     * @param status 状态（可选）
     * @param type   类型（可选）
     * @param page   页码
     * @param size   每页大小
     * @return 反馈列表
     */
    IPage<UserFeedback> getAllFeedbacks(Integer status, String type, int page, int size);

    /**
     * 批量标记反馈为已处理
     *
     * @param feedbackIds 反馈ID列表
     * @return 操作结果
     */
    Result<Void> batchMarkAsProcessed(Long[] feedbackIds);

    /**
     * 批量回复反馈
     *
     * @param feedbackIds 反馈ID列表
     * @param reply       回复内容
     * @return 操作结果
     */
    Result<Void> batchReplyFeedback(Long[] feedbackIds, String reply);
}